package com.cykj.eurekaribbon.controller;

import com.cykj.eurekaribbon.bean.StationInfo;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.net.URI;
import java.util.List;
import java.util.Map;

@RestController
public class busController {

    @Autowired
    LoadBalancerClient loadBalancerClient;

    /**
     * 用于转发请求
     */
    @Autowired
    private RestTemplate restTemplate;

    // 点击搜索框查线路或地名的方法
    @RequestMapping("/getSearchInfo")
    public List<StationInfo> getInfo(@RequestBody Map<String, String> data) {
        System.out.println("进入搜索方法");
        //getForObject 调用有参方法，路径添加参数。返回结果为String的方法
//        String url = "http://client/getSearchInfo?searchInfo="+data.get("searchInfo");
        // 根据名字有在注册中心注册的端口
        ServiceInstance instance = loadBalancerClient.choose("CLIENT");
        // 拼接url请求：类似 String url = "http://client/getSearchInfo?searchInfo="+data.get("searchInfo");
        // 获取请求的地址，"http://%s:%s/getSearchInfo"：请求的格式，instance.getHost()：ip，instance.getPort()：端口。
//      // uri = 请求的地址
        URI uri = URI.create(String.format("http://%s:%s/getSearchInfo",
                instance.getHost(), instance.getPort()));
        System.out.println("instance.getHost():" + instance.getHost() + "," + instance.getPort());
        // RestTemplate：请求的转发，当post请求时，需要手动new一个新的，否则直接用注入
        RestTemplate restTemplate = new RestTemplate();
//      // uri,data,List.class：地址，传送的数据，接收的数据格式（如果的一个对象就直接写bean的名字）
        List list = restTemplate.postForObject(uri, data, List.class);
        System.out.println(list.size());
        return list;
    }


    // 点击搜索框查线路名字的方法
    @RequestMapping("/getRouteName")
    public String getRouteName(@RequestBody Map<String, String> data) {
        System.out.println("getRouteName");
        //getForObject 调用有参方法，路径添加参数。返回结果为String的方法
//        String url = "http://client/getSearchInfo?searchInfo="+data.get("searchInfo");
        // 根据名字有在注册中心注册的端口
        ServiceInstance instance = loadBalancerClient.choose("CLIENT");
        // 拼接url请求：类似 String url = "http://client/getSearchInfo?searchInfo="+data.get("searchInfo");
        // 获取请求的地址，"http://%s:%s/getSearchInfo"：请求的格式，instance.getHost()：ip，instance.getPort()：端口。
//      // uri = 请求的地址
        URI uri = URI.create(String.format("http://%s:%s/getRouteName",
                instance.getHost(), instance.getPort()));
        System.out.println("instance.getHost():" + instance.getHost() + "," + instance.getPort());
        // RestTemplate：请求的转发，当post请求时，需要手动new一个新的，否则直接用注入
        RestTemplate restTemplate = new RestTemplate();
//      // uri,data,List.class：地址，传送的数据，接收的数据格式（如果的一个对象就直接写bean的名字）
        String selRouteName = restTemplate.postForObject(uri, data, String.class);
        return selRouteName;
    }

    // 点击搜索框查线路名字的方法
    @RequestMapping("/getStationListMY")
    public List<StationInfo> getStationListMY(@RequestBody Map<String, String> data) {
        System.out.println("getStationListMY");
        //getForObject 调用有参方法，路径添加参数。返回结果为String的方法
//        String url = "http://client/getSearchInfo?searchInfo="+data.get("searchInfo");
        // 根据名字有在注册中心注册的端口
        ServiceInstance instance = loadBalancerClient.choose("CLIENT");
        // 拼接url请求：类似 String url = "http://client/getSearchInfo?searchInfo="+data.get("searchInfo");
        // 获取请求的地址，"http://%s:%s/getSearchInfo"：请求的格式，instance.getHost()：ip，instance.getPort()：端口。
//      // uri = 请求的地址
        URI uri = URI.create(String.format("http://%s:%s/getStationListMY",
                instance.getHost(), instance.getPort()));
        System.out.println("instance.getHost():" + instance.getHost() + "," + instance.getPort());
        // RestTemplate：请求的转发，当post请求时，需要手动new一个新的，否则直接用注入
        RestTemplate restTemplate = new RestTemplate();
//      // uri,data,List.class：地址，传送的数据，接收的数据格式（如果的一个对象就直接写bean的名字）
        List stationInfos = restTemplate.postForObject(uri, data, List.class);
        System.out.println("stationInfos:" + stationInfos.size());
        return stationInfos;
    }

//    deliveryStartSiteAll


    // 点击搜索框查线路名字的方法
    @RequestMapping("/deliveryStartSiteAll")
    public List deliveryStartSiteAll(@RequestBody Map<String, String> data) {
//        // 前端json转字符串：JSON.stringify(obj) ，后端json对象转字符串：JSON.toJSONString(data)
//        System.out.println("deliveryStartSiteAll");
//        ServiceInstance instance = loadBalancerClient.choose("CLIENT");
//        URI uri = URI.create(String.format("http://%s:%s/deliveryStartSiteAll",
//                instance.getHost(), instance.getPort()));
//        RestTemplate restTemplate = new RestTemplate();
//        List<Transfer> stationInfos = restTemplate.postForObject(uri, data, List.class);


// 前端json转字符串：JSON.stringify(obj) ，后端json对象转字符串：JSON.toJSONString(data)
        System.out.println("deliveryStartSiteAll");
        HttpHeaders httpHeaders = new HttpHeaders();
        MediaType type =  MediaType.parseMediaType("application/json; charset=UTF-8");
        httpHeaders.setContentType(type);
        httpHeaders.set("Connection", "Close");
        httpHeaders.add("Accept", MediaType.APPLICATION_JSON.toString());
        JSONObject jsonObj = JSONObject.fromObject(data);
        HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), httpHeaders);
        return restTemplate.postForObject("http://CLIENT/deliveryStartSiteAll",formEntity, List.class);

    }

    // 点击搜索框查线路名字的方法
    @RequestMapping("/deliveryEndSiteAll")
    public void deliveryEndSiteAll(@RequestBody Map<String, String> data) {
        // 前端json转字符串：JSON.stringify(obj) ，后端json对象转字符串：JSON.toJSONString(data)
        System.out.println("deliveryEndSiteAll");
        ServiceInstance instance = loadBalancerClient.choose("CLIENT");
        URI uri = URI.create(String.format("http://%s:%s/deliveryEndSiteAll",
                instance.getHost(), instance.getPort()));
        RestTemplate restTemplate = new RestTemplate();
        List stationInfos = restTemplate.postForObject(uri, data, List.class);

    }


    // 点击搜索框查线路名字的方法
    @RequestMapping("/Pay")
    public String Pay(@RequestBody Map<String, String> data) {

        System.out.println("Pay");
        ServiceInstance instance = loadBalancerClient.choose("CLIENT");
        URI uri = URI.create(String.format("http://%s:%s/Pay",
                instance.getHost(), instance.getPort()));
        System.out.println("instance.getHost():" + instance.getHost() + "," + instance.getPort());
        // RestTemplate：请求的转发，当post请求时，需要手动new一个新的，否则直接用注入
        RestTemplate restTemplate = new RestTemplate();
//      // uri,data,List.class：地址，传送的数据，接收的数据格式（如果的一个对象就直接写bean的名字）
        String pay = restTemplate.postForObject(uri, data, String.class);
        System.out.println("99999999999999999:" + pay);
        return pay;


//        System.out.println("Pay");
//        HttpHeaders httpHeaders = new HttpHeaders();
//        MediaType type =  MediaType.parseMediaType("application/json; charset=UTF-8");
//        httpHeaders.setContentType(type);
//        httpHeaders.set("Connection", "Close");
//        httpHeaders.add("Accept", MediaType.APPLICATION_JSON.toString());
//        JSONObject jsonObj = JSONObject.fromObject(data);
//        String formEntity = new String(jsonObj.toString(), httpHeaders);
//        return restTemplate.postForObject("http://CLIENT/Pay",formEntity, String.class);

    }


}
